Amazon Redshift Serverlessでデータ共有を試してみました
データアナリティクス事業本部の鈴木です。
Redshiftのクラスター間でデータ共有をしたいときに非常に強力なデータ共有ですが、Redshift Serverlessで気軽に複数のインスタンスを準備できるようになったこともあり、この機にチャレンジしてみたのでご共有です。
確認したかったこと
同一アカウントの2つのRedshift Serverlessインスタンスを起動し、データ共有の設定方法を確認しました。
今回はVPCとサブネットは別々のものを用意しました。
Redshift Serverlessインスタンスの準備
以下のブログで紹介されているCloudFormationテンプレートを使い、リソースを準備しました。
なお、最小ベースキャパシティは8RPUとしました。今年3月のアップデートで最小ベースキャパシティをより小さくできるようになったためです。
今回はデータ共有の設定節にて紹介するブログに合わせて、プロデューサーおよびコンシューマーの計2つのRedshift Serverlessインスタンスを準備しました。具体的には、上記ブログのCloudFormationテンプレートをデプロイし、2つのRedshift Serverlessインスタンスを同一アカウントに構築しました。
データ共有の設定
操作は以下のブログと同じ手順で行い、問題なくできることを確認しました。
『Amazon Redshift Serverless でのデータ共有 - Amazon Redshift』のドキュメントに記載の内容からも、サーバーレスでもデータ共有は可能なことが分かります。
やってみる
1. プロデューサー側の設定
データの準備
まず、プロデューサーのRedshift Serverlessインスタンスに、Redshift query editor v2で接続し、tickit
サンプルデータベースを作成しました。
sample_data_dev
でtickit
の右にあるボタンを押しました。
確認のポップアップが出るのでCreate
としました。
サンプルデータベースが作成されました。
NAMESPACEの取得
プロデューサーおよびコンシューマーのRedshift Serverlessインスタンスに、Redshift query editor v2で接続し、以下のSQLでNAMESPACE(37ba07bc-d5bf-4916-97b7-28ba45937392
のような値)の取得をしました。
select current_namespace;
データ共有の設定
プロデューサー側のデータ共有の設定を進めました。
前提として、プロデューサー側のワークグループおよびサンプルデータベースを指定して、SQLを実行していきました。
ワークグループは見切れていて分かりにくいですが、以下のように指定しています。
まず、データ共有を作成しました。
CREATE DATASHARE tickit_datashare;
今回はパブリックIPを付与していたこともあり、先に紹介したブログに倣って、データ共有のパブリックアクセスを許可しました。
ALTER DATASHARE tickit_datashare SET publicaccessible = TRUE;
データ共有にtickitスキーマを追加しました。
ALTER DATASHARE tickit_datashare ADD SCHEMA tickit;
とりあえず1テーブルだけ共有するだけで良かったので、users
テーブルだけデータ共有に追加してみました。
ALTER DATASHARE tickit_datashare ADD TABLE tickit.users;
コンシューマーのRedshift ServerlessのNAMESPACE
はメモしておいたものに置き換えてください。
GRANT USAGE ON DATASHARE tickit_datashare TO NAMESPACE 'コンシューマーのRedshift ServerlessのNAMESPACE';
これでプロデューサー側の設定は終わりです。
この時点で、Redshiftのコンソールからも作成したtickit_datashare
が確認できるようになりました。
データ共有名をクリックして、個別のデータ共有の詳細を確認することができました。
2. コンシューマー側の設定
コンシューマー側のデータ共有の設定を進め、プロデューサー側で作成したデータ共有でテーブルの中身を参照できるか確認しました。
以下のSQLでデータ共有からデータベースを作成しました。プロデューサーのRedshift ServerlessのNAMESPACE
はメモしておいたものに置き換えてください。
CREATE DATABASE consumer_tickit FROM DATASHARE tickit_datashare OF NAMESPACE 'プロデューサーのRedshift ServerlessのNAMESPACE';
awsuser
ユーザーに作成したデータベースの使用許可を付与しました。
GRANT USAGE ON DATABASE consumer_tickit TO awsuser;
共有したテーブルの中身が見られるか確認しました。確かに検索できていますね。
最後に
今回はRedshift Serverlessで同一アカウントでのデータ共有の設定をRedshift query editor v2で試してみました。
今年の4月にはLake Formationを使用したデータ共有の一元的なアクセスコントロールの一般提供もアナウンスされましたが、一番オーソドックスなやり方をこのように簡単に試して学べるのはとても嬉しいですね。
参考になりましたら幸いです。